<?php

class LocationContain_IndexController extends Zend_Controller_Action
{
	protected $_object;
	protected $_location;

	public function init()
	{
		//tạo đối tượng chính của module
		$this->_object = new Admin_Model_LocationContain ();
		$location_id = $this->getRequest ()->getParam ( 'location_id' );
		
		//Xu ly truong hop thieu location_id
		if (is_null ( $location_id ))
		{
			//
			$this->_helper->redirector ( 'index', 'index', 'location', array () );
		}
		
		$this->_location = new Admin_Model_Location ();
		$this->_location = $this->_location->findBase ( $location_id );
		
		//lấy tiêu đề 
		$this->_helper->common->setCaptions ( array (), array ('location', 'location-contain' ) );
	}

	//xem danh sách tất cả 
	public function indexAction()
	{
		//lấy tham số
		$request = $this->_request;
		$location_contain_status = $request->getParam ( 'location_contain_status', '' );
		$location_contain_code = $request->getParam ( 'location_contain_code', '' );
		$location_contain_name = $request->getParam ( 'location_contain_name', '' );
		$search_keyword = $request->getParam ( 'search_keyword', '' );
		
		$form = new Location_Form_Location_Detail ( $this );
		
		//đổ dữ liệu vào form 
		$form->populate ( $this->_location->toArray () );
		
		//các cột cần lấy dữ liệu
		$select = " 
		SELECT
			`location_contain_id`
			, `location_contain_location_code`
			, `location_contain_product_code`
			, `location_contain_max`
			, `location_contain_unit_code`
			, `location_contain_order`
			, `location_contain_status`
		FROM tbl_location_contain ";
		
		//thiết lập điều kiện lấy dữ liệu
		$where = " WHERE 1 ";
		$where .= " AND `location_contain_location_code` = '{$this->_location->location_code}' ";
		if ($location_contain_status != '')
			$where .= " AND `location_contain_status` = '$location_contain_status' ";
		if ($search_keyword != '')
		{ //Xu ly tim kiem
			$where .= " AND (`location_contain_location_code` LIKE '%$search_keyword%' ";
			$where .= " OR `location_contain_product_code` LIKE '%$search_keyword%' ";
			$where .= " OR `location_contain_unit_code` LIKE '%$search_keyword%') ";
		}
		
		//thiết lập thứ tự lấy dữ liệu
		$order = $this->_helper->common->getOrderString ( array ('location_contain_id DESC' ) );
		
		//lấy dữ liệu
		$query = $select . $where . $order;
		$data = $this->_object->queryBase ( $query );
		
		//phân trang
		$this->_helper->common->paginate ( $data );
		
		//truyền dữ liệu ra view
		$this->view->location = $this->_location;
		$this->view->form = $form;
		$this->view->location_contain_status = $location_contain_status;
		$this->view->search_keyword = $search_keyword;
	}

	//kích hoạt/ vô hiệu hóa 1 hoặc nhiều dòng
	public function publishAction()
	{
		$this->_helper->action->publish ( $this->_object, 'location_contain_status' );
	}

	//lưu thứ tự sắp xếp của các dòng
	public function saveOrderAction()
	{
		$this->_helper->action->saveOrder ( $this->_object, 'location_contain_order' );
	}

	//xóa 1 hoặc nhiều dòng
	public function deleteAction()
	{
		$this->_helper->action->delete ( $this->_object, 'afterDelete', 'beforeDelete' );
	}

	//hàm kiểm tra dữ liệu ràng buộc trước khi xóa
	//nếu trả về true thì cho xóa, ngược lại kg cho xóa
	public function beforeDelete()
	{
		return true;
	}

	//hàm giải phóng dữ liệu liên quan sau khi xóa
	public function afterDelete()
	{
	
	}

	//thêm 1 dòng
	public function insertAction()
	{
		//lấy tham số
		$request = $this->_request;
		
		//tạo form
		$form = new LocationContain_Form_LocationContain_Insert ( $this );
		
		//Tao du lieu cho select "san pham"
		$product = new Admin_Model_Product ();
		$products = $product->fetchAllBase ();
		$products = $product->toArray2 ( $products, "product_code", "product_name" );
		$form->location_contain_product_code->setMultiOptions ( array ('' => '- Chọn -' ) + $products );
		
		//Tao du lieu cho select "don vi tinh"
		$unit = new Admin_Model_Unit ();
		$units = $unit->fetchAllBase ();
		$units = $unit->toArray2 ( $units, "unit_code", "unit_name" );
		$form->location_contain_unit_code->setMultiOptions ( array ('' => '- Chọn -' ) + $units );
		
		//phần xử lí chính
		if ($request->isPost ()) //khi post giá trị
		{
			if ($form->isValid ( $request->getPost () )) //khi giá trị trong form đã được kiểm tra thành công
			{
				$adminAction = $form->getValue ( 'adminAction' );
				$location_contain = new Admin_Model_LocationContain ( $form->getValues () );
				
				//nếu form không có lỗi
				if (! $form->isErrors ())
				{
					try
					{
						//insert dòng mới
						$location_contain->location_contain_location_code = $this->_location->location_code;						
						$location_contain->insertBase ();
						
						//thông báo + chuyển hướng trang khi thành công				
						$this->_helper->flashMessenger ( 'Thêm thành công.' );
						if ($adminAction == 'save-and-close')
						{
							$this->_helper->redirector ( 'index', 'index', 'location-contain', array ('location_id' => $this->_location->location_id ) );
						}
						else if ($adminAction == 'save-and-new')
						{
							$this->_helper->redirector ( 'insert', 'index', 'location-contain', array ('location_id' => $this->_location->location_id ) );
						}
					}
					catch ( Exception $e )
					{
					
					}
				}
			}
		}
		else //khi vào form lần đầu tiên
		{
		
		}
		
		//truyền dữ liệu ra view
		$this->view->form = $form;
		$this->view->s_title = " / <a href='" . $this->view->url ( array ("action" => "index", "module" => "location", "controller" => "index" ), null, true ) . "'>Quản lý vị trí kho</a> / <a href='".$this->view->url ( array ("action" => "index", "module" => "location-contain", "controller" => "index" ,"location_id"=>$this->_location->location_id), null, true )."'>Xem chi tiết vị trí kho: {$this->_location->location_code}</a> / Thêm mới sức chứa";
	}

	//cập nhật 1 dòng
	public function updateAction()
	{
		//lấy tham số
		$request = $this->_request;
		$id = $request->getParam ( 'id' );
		if (is_array ( $id ))
			$id = $id [count ( $id ) - 1];
		
		//lấy đối tượng cần cập nhật
		$first_location_contain = new Admin_Model_LocationContain ();
		$first_location_contain->findBase ( $id );
		
		//tạo form
		$form = new LocationContain_Form_LocationContain_Update ( $this );
		
		//Tao du lieu cho select "san pham"
		$product = new Admin_Model_Product ();
		$products = $product->fetchAllBase ();
		$products = $product->toArray2 ( $products, "product_code", "product_name" );		
		$form->location_contain_product_code->setMultiOptions ( array ('' => '- Chọn -' ) + $products );
		
		//Tao du lieu cho select "don vi tinh"
		$unit = new Admin_Model_Unit ();
		$units = $unit->fetchAllBase ();
		$units = $unit->toArray2 ( $units, "unit_code", "unit_name" );		
		$form->location_contain_unit_code->setMultiOptions ( array ('' => '- Chọn -' ) + $units );
		
		//phần xử lí chính
		if ($request->isPost ()) //khi post giá trị
		{
			if ($form->isValid ( $request->getPost () )) //khi giá trị trong form đã được kiểm tra thành công
			{
				$adminAction = $form->getValue ( 'adminAction' );				
				$location_contain = new Admin_Model_LocationContain ( $form->getValues () );
				
				//nếu form không có lỗi
				if (! $form->isErrors ())
				{
					try
					{
						//update dữ liệu
						$location_contain->updateBase ( $id );
						
						//thông báo + chuyển hướng trang khi thành công				
						$this->_helper->flashMessenger ( 'Cập nhật thành công.' );
						if ($adminAction == 'apply')
						{
							$this->_helper->redirector ( 'update', 'index', 'location-contain', array ('location_id' => $this->_location->location_id, 'id' => $id ) );
						}
						else if ($adminAction == 'save-and-close')
						{
							$this->_helper->redirector ( 'index', 'index', 'location-contain', array ('location_id' => $this->_location->location_id ) );
						}
						else if ($adminAction == 'save-and-new')
						{
							$this->_helper->redirector ( 'insert', 'index', 'location-contain', array ('location_id' => $this->_location->location_id ) );
						}
					}
					catch ( Exception $e )
					{
						echo $e->getMessage ();
					}
				}
			}
		}
		else //khi vào form lần đầu tiên
		{
			$form->populate ( $first_location_contain->toArray () );
		}
		
		//truyền dữ liệu ra view
		$this->view->form = $form;
		$this->view->s_title = " / <a href='" . $this->view->url ( array ("action" => "index", "module" => "location", "controller" => "index" ), null, true ) . "'>Quản lý vị trí kho</a> / <a href='".$this->view->url ( array ("action" => "index", "module" => "location-contain", "controller" => "index" ,"location_id"=>$this->_location->location_id), null, true )."'>Xem chi tiết vị trí kho: {$this->_location->location_code}</a> / Cập nhật sức chứa";
	}
}